module.exports = {
    /**
     * 初始化测试
     * @param  {SuperTest} st       必填，supertest对象
     * @param  {object} url         必填，url对象，包括local，remote，tql参数
     *                                  local用于访问nodeweb测试数据
     *                                  remote用于访问公网webservice，相对地址服务器地址在公用配置文件中配置
     *                                  tql用于访问tql服务器数据，服务器地址在公用配置文件中配置
     *                              一个可能的配置如下
     *                                  {
     *                                     'local': '/mock/login',
     *                                      'remote': '/login',
     *                                      'tql': {
     *                                          'd': 'scenicnet_app',
     *                                          'm': 'user.login'
     *                                      }
     *                                  }
     * @param  {object} params      必填，请求参数
     * @param  {function} done      必填，supertest done函数
     * @param  {function} doExpect  选填，处理异常，参数response
     *                              默认以json格式判断response.body中的success字段，false则抛出异常
     */
    initTest: function(st, url, params, done, doExpect) {
        var test;
        if (url.local && url.local.length != 0) {
            test = st.get(url.local);
            test.set('Content-Type', 'text/plain');
            test.send(this.initParams(params));
            test.expect(200)
                .expect(function(res) {
                    var result = res.body;
                    if(!result.success) {
                        throw new Error("测试失败，原因是:" + (result.msg || "未知错误"));
                    }
                    if(doExpect && typeof doExpect == 'function') {
                        doExpect(res);
                    }
                })
                .end(done);
        }
    },

    initParams: function(data) {
        try {
            return encodeURIComponent(JSON.stringify(data));
        } catch (e) {
            return "{}";
        }
    }
};
